/*
 * Copyright 2008-2023 dexian.vip. All rights reserved.
 * Support: http://www.dexian.vip
 * License: http://www.dexian.vip/license
 */

package vip.dexian.common.freemarker.converter;

import org.apache.commons.beanutils.converters.AbstractConverter;

/**
 * 枚举转换器
 *
 * @author 挺好的 2023年05月30日 16:30
 */
public final class EnumConverter extends AbstractConverter {

    /**
     * 枚举Class对象，一旦创建就是不可变
     */
    private final Class <?> enumClass;

    /**
     * 构造
     *
     * @param enumClass
     *         枚举的Class对象
     */
    public EnumConverter (Class <?> enumClass) {
        this(enumClass, null);
    }

    /**
     * 构造
     *
     * @param enumClass
     *         枚举的Class对象
     * @param defaultValue
     *         默认值
     */
    public EnumConverter (Class <?> enumClass, Object defaultValue) {
        super(defaultValue);
        this.enumClass = enumClass;
    }


    /**
     * 将value转换为指定的type类型的对象
     *
     * @param type
     *         指定类型
     * @param value
     *         将要转换的值
     *
     * @return Class<T> type 类型的对象
     */
    @Override
    protected Object convertToType (Class type, Object value) {
        String stringValue = value.toString().trim();
        return Enum.valueOf(type, stringValue);
    }

    /**
     * @return 返回此转换器的默认类型
     */
    @Override
    protected Class <?> getDefaultType () {
        return null;
    }

    /**
     * 转换为String
     *
     * @param value
     *         将要转换的值
     *
     * @return 调用toString()方法
     */
    @Override
    protected String convertToString (Object value) {
        return value.toString();
    }
}
